home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume2 / aplictns / matlab / doc.1 next >
Internet Message Format  |  1988-11-03  |  60KB

  1. Path: xanth!nic.MR.NET!umn-d-ub!rutgers!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v02i050:  matlab - matrix laboratory, Part10/11 (doc01/02)
  5. Message-ID: <10025@swan.ulowell.edu>
  6. Date: 2 Nov 88 21:54:17 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 2320
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: strovink%galaxy-43@afit-ab.arpa (Mark A. Strovink)
  12. Posting-number: Volume 2, Issue 50
  13. Archive-name: applications/matlab/doc.1
  14.  
  15. #    This is a shell archive.
  16. #    Remove everything above and including the cut line.
  17. #    Then run the rest of the file through sh.
  18. #----cut here-----cut here-----cut here-----cut here----#
  19. #!/bin/sh
  20. # shar:    Shell Archiver
  21. #    Run the following text with /bin/sh to create:
  22. #    doc.1
  23. # This archive created: Wed Nov  2 16:14:31 1988
  24. cat << \SHAR_EOF > doc.1
  25.  
  26.  
  27. 6/24/81
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.                        MATLAB Users' Guide
  40.                             May, 1981
  41.  
  42.  
  43.                            Cleve Moler
  44.                  Department of Computer Science
  45.                     University of New Mexico
  46.  
  47.  
  48.      ABSTRACT.  MATLAB is an  interactive  computer  program
  49.      that   serves   as   a   convenient   "laboratory"  for
  50.      computations  involving  matrices.   It  provides  easy
  51.      access  to matrix software developed by the LINPACK and
  52.      EISPACK projects.  The program is  written  in  Fortran
  53.      and  is  designed  to  be  readily  installed under any
  54.      operating system which permits interactive execution of
  55.      Fortran programs.
  56.  
  57.  
  58.  
  59.                             CONTENTS
  60.  
  61.           1.  Elementary operations              page  2
  62.           2.  MATLAB functions                         8
  63.           3.  Rows, columns and submatrices            9
  64.           4.  FOR, WHILE and IF                       10
  65.           5.  Commands, text, files and macros        12
  66.           6.  Census example                          13
  67.           7.  Partial differential equation           19
  68.           8.  Eigenvalue sensitivity example          23
  69.           9.  Syntax diagrams                         27
  70.          10.  The parser-interpreter                  31
  71.          11.  The numerical algorithms                34
  72.          12.  FLOP and CHOP                           37
  73.          13.  Communicating with other programs       41
  74.          Appendix.  The HELP file                     46
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93. 6/24/81
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.                        MATLAB Users' Guide
  106.                          November, 1980
  107.  
  108.  
  109.                            Cleve Moler
  110.                  Department of Computer Science
  111.                     University of New Mexico
  112.  
  113.  
  114.  
  115.      MATLAB is an interactive computer program that serves  as  a
  116. convenient  "laboratory" for computations involving matrices.  It
  117. provides easy access to matrix software developed by the  LINPACK
  118. and EISPACK projects [1-3].  The capabilities range from standard
  119. tasks such as solving simultaneous linear equations and inverting
  120. matrices, through symmetric and nonsymmetric eigenvalue problems,
  121. to fairly sophisticated matrix tools such as the  singular  value
  122. decomposition.
  123.  
  124.      It is expected that one of MATLAB's primary uses will be  in
  125. the  classroom.   It  should be useful in introductory courses in
  126. applied linear algebra, as  well  as  more  advanced  courses  in
  127. numerical analysis, matrix theory, statistics and applications of
  128. matrices to other disciplines.  In nonacademic  settings,  MATLAB
  129. can  serve as a "desk calculator" for the quick solution of small
  130. problems involving matrices.
  131.  
  132.      The program is written in Fortran  and  is  designed  to  be
  133. readily  installed  under  any  operating  system  which  permits
  134. interactive  execution  of  Fortran  programs.    The   resources
  135. required  are  fairly  modest.  There are less than 7000 lines of
  136. Fortran  source  code,  including   the   LINPACK   and   EISPACK
  137. subroutines  used.   With  proper use of overlays, it is possible
  138. run the system on a minicomputer with only 32K bytes of memory.
  139.  
  140.      The size of the matrices  that  can  be  handled  in  MATLAB
  141. depends  upon  the  amount  of storage that is set aside when the
  142. system is compiled on a particular machine.  We have  found  that
  143. an  allocation of 5000 words for matrix elements is usually quite
  144. satisfactory.  This provides room for several 20 by 20  matrices,
  145. for  example.   One  implementation  on  a  virtual memory system
  146. provides 100,000 elements.  Since most  of  the  algorithms  used
  147. access  memory  in  a  sequential  fashion,  the  large amount of
  148. allocated storage causes no difficulties.
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159. MATLAB, page 2
  160.  
  161.  
  162.  
  163.      In some ways, MATLAB  resembles  SPEAKEASY  [4]  and,  to  a
  164. lesser  extent, APL.  All are interactive terminal languages that
  165. ordinarily accept single-line  commands  or  statements,  process
  166. them  immediately,  and  print  the  results.  All have arrays or
  167. matrices as principal data types.  But for MATLAB, the matrix  is
  168. the  only  data  type  (although  scalars,  vectors  and text are
  169. special cases), the underlying system is  portable  and  requires
  170. fewer resources, and the supporting subroutines are more powerful
  171. and, in some cases, have better numerical properties.
  172.  
  173.      Together, LINPACK and EISPACK represent the state of the art
  174. in software for matrix computation.  EISPACK is a package of over
  175. 70 Fortran subroutines for various matrix eigenvalue computations
  176. that are based for the most part on Algol procedures published by
  177. Wilkinson, Reinsch  and  their  colleagues  [5].   LINPACK  is  a
  178. package  of  40  Fortran subroutines (in each of four data types)
  179. for solving  and  analyzing  simultaneous  linear  equations  and
  180. related matrix problems.  Since MATLAB is not primarily concerned
  181. with either execution time  efficiency  or  storage  savings,  it
  182. ignores  most  of  the special matrix properties that LINPACK and
  183. EISPACK subroutines  use  to  advantage.   Consequently,  only  8
  184. subroutines   from  LINPACK  and  5  from  EISPACK  are  actually
  185. involved.
  186.  
  187.      In  more  advanced  applications,  MATLAB  can  be  used  in
  188. conjunction  with other programs in several ways.  It is possible
  189. to define new MATLAB functions and add them to the system.   With
  190. most  operating  systems,  it  is  possible to use the local file
  191. system to  pass  matrices  between  MATLAB  and  other  programs.
  192. MATLAB  command  and statement input can be obtained from a local
  193. file  instead  of  from  the  terminal.   The  most   power   and
  194. flexibility  is obtained by using MATLAB as a subroutine which is
  195. called by other programs.
  196.  
  197.      This document first gives an overview  of  MATLAB  from  the
  198. user's  point  of  view. Several extended examples involving data
  199. fitting, partial differential equations,  eigenvalue  sensitivity
  200. and other topics are included.  A formal definition of the MATLAB
  201. language and an brief description of the parser  and  interpreter
  202. are   given.   The  system  was  designed  and  programmed  using
  203. techniques described by Wirth [6], implemented  in  nonrecursive,
  204. portable  Fortran.   There  is  a brief discussion of some of the
  205. matrix algorithms and of their numerical properties.   The  final
  206. section  describes  how  MATLAB  can be used with other programs.
  207. The appendix includes the HELP documentation available on-line.
  208.  
  209.  
  210. 1.  Elementary operations
  211.  
  212.  
  213.      MATLAB works with essentially only one  kind  of  object,  a
  214. rectangular matrix with complex elements.  If the imaginary parts
  215. of the elements are all zero, they  are  not  printed,  but  they
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. MATLAB, page 3
  226.  
  227.  
  228.  
  229. still  occupy  storage.   In  some situations, special meaning is
  230. attached to 1 by 1 matrices, that is scalars, and to 1 by n and m
  231. by 1 matrices, that is row and column vectors.
  232.  
  233.      Matrices can be introduced into  MATLAB  in  four  different
  234. ways:
  235.         --  Explicit list of elements,
  236.         --  Use of FOR and WHILE statements,
  237.         --  Read from an external file,
  238.         --  Execute an external Fortran program.
  239.  
  240.      The explicit list is surrounded by angle brackets,  '<'  and
  241. '>', and uses the semicolon ';' to indicate the ends of the rows.
  242. For example, the input line
  243.  
  244.    A = <1 2 3; 4 5 6; 7 8 9>
  245.  
  246. will result in the output
  247.  
  248.    A     =
  249.  
  250.        1.    2.   3.
  251.        4.    5.   6.
  252.        7.    8.   9.
  253.  
  254. The matrix A  will  be  saved  for  later  use.   The  individual
  255. elements  are separated by commas or blanks and can be any MATLAB
  256. expressions, for example
  257.  
  258.    x = < -1.3, 4/5, 4*atan(1) >
  259.  
  260. results in
  261.  
  262.    X     =
  263.  
  264.      -1.3000   0.8000   3.1416
  265.  
  266. The elementary functions available include sqrt, log,  exp,  sin,
  267. cos, atan, abs, round, real, imag, and conjg.
  268.  
  269.      Large matrices can be spread  across  several  input  lines,
  270. with  the  carriage  returns replacing the semicolons.  The above
  271. matrix could also have been produced by
  272.  
  273.    A = < 1 2 3
  274.          4 5 6
  275.          7 8 9 >
  276.  
  277.  
  278.      Matrices can be input from the local  file  system.   Say  a
  279. file named 'xyz' contains five lines of text,
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291. MATLAB, page 4
  292.  
  293.  
  294.  
  295.    A = <
  296.    1 2 3
  297.    4 5 6
  298.    7 8 9
  299.    >;
  300.  
  301. then the  MATLAB  statement  EXEC('xyz')  reads  the  matrix  and
  302. assigns it to A .
  303.  
  304.      The FOR statement allows the generation  of  matrices  whose
  305. elements  are  given  by  simple formulas.  Our example matrix  A
  306. could also have been produced by
  307.  
  308.    for i = 1:3, for j = 1:3, a(i,j) = 3*(i-1)+j;
  309.  
  310. The semicolon at the end of the  line  suppresses  the  printing,
  311. which  in  this  case  would  have  been  nine versions of A with
  312. changing elements.
  313.  
  314.      Several statements may be given  on  a  line,  separated  by
  315. semicolons or commas.
  316.  
  317.      Two  consecutive  periods  anywhere  on  a   line   indicate
  318. continuation.   The  periods  and  any  following  characters are
  319. deleted, then another line is input  and  concatenated  onto  the
  320. previous line.
  321.  
  322.      Two  consecutive  slashes  anywhere  on  a  line  cause  the
  323. remainder  of  the  line  to  be  ignored.   This  is  useful for
  324. inserting comments.
  325.  
  326.      Names of variables are formed by a letter, followed  by  any
  327. number of letters and digits, but only the first 4 characters are
  328. remembered.
  329.  
  330.      The special character  prime  (')  is  used  to  denote  the
  331. transpose of a matrix, so
  332.  
  333.    x = x'
  334.  
  335. changes the row vector above into the column vector
  336.  
  337.    X     =
  338.  
  339.      -1.3000
  340.       0.8000
  341.       3.1416
  342.  
  343.  
  344.      Individual matrix elements may be  referenced  by  enclosing
  345. their  subscripts  in  parentheses.  When any element is changed,
  346. the entire matrix is reprinted.  For  example,  using  the  above
  347. matrix,
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357. MATLAB, page 5
  358.  
  359.  
  360.  
  361.    a(3,3) = a(1,3) + a(3,1)
  362.  
  363. results in
  364.  
  365.    A     =
  366.  
  367.        1.    2.    3.
  368.        4.    5.    6.
  369.        7.    8.   10.
  370.  
  371.  
  372.      Addition, subtraction and  multiplication  of  matrices  are
  373. denoted  by  +, -, and * .  The operations are performed whenever
  374. the matrices have the proper dimensions.  For example,  with  the
  375. above  A  and  x,  the  expressions  A  + x and x*A are incorrect
  376. because A is 3 by 3 and x is now 3 by 1.  However,
  377.  
  378.    b = A*x
  379.  
  380. is correct and results in the output
  381.  
  382.    B     =
  383.  
  384.       9.7248
  385.      17.6496
  386.      28.7159
  387.  
  388. Note that both upper and lower case letters are allowed for input
  389. (on  those  systems  which  have  both),  but  that lower case is
  390. converted to upper case.
  391.  
  392.      There are two "matrix division" symbols in MATLAB, \ and / .
  393. (If  your  terminal  does not have a backslash, use $ instead, or
  394. see CHAR.) If A and B are matrices, then A\B and  B/A  correspond
  395. formally  to left and right multiplication of B by the inverse of
  396. A , that is inv(A)*B and B*inv(A), but  the  result  is  obtained
  397. directly  without  the computation of the inverse.  In the scalar
  398. case, 3\1 and 1/3 have the  same  value,  namely  one-third.   In
  399. general,  A\B  denotes the solution X to the equation A*X = B and
  400. B/A denotes the solution to X*A = B.
  401.  
  402.      Left division, A\B, is defined whenever B has as  many  rows
  403. as   A  .   If  A  is  square,  it  is  factored  using  Gaussian
  404. elimination.   The  factors  are  used  to  solve  the  equations
  405. A*X(:,j) = B(:,j) where B(:,j) denotes the j-th column of B.  The
  406. result is a matrix X with the same dimensions  as  B.   If  A  is
  407. nearly  singular  (according  to the LINPACK condition estimator,
  408. RCOND), a warning message is printed.  If A is not square, it  is
  409. factored   using   Householder   orthogonalization   with  column
  410. pivoting.   The  factors  are  used  to  solve  the   under-   or
  411. overdetermined equations in a least squares sense.  The result is
  412. an m by n matrix X where m is the number of columns of A and n is
  413. the  number  of  columns  of  B .  Each column of X has at most k
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423. MATLAB, page 6
  424.  
  425.  
  426.  
  427. nonzero components, where k is the effective rank of A .
  428.  
  429.      Right division,  B/A,  can  be  defined  in  terms  of  left
  430. division by  B/A = (A'\B')'.
  431.  
  432.      For example, since our vector  b   was computed as  A*x, the
  433. statement
  434.  
  435.    y = A\b
  436.  
  437. results in
  438.  
  439.    Y     =
  440.  
  441.      -1.3000
  442.       0.8000
  443.       3.1416
  444.  
  445. Of course,  y  is  not  exactly  equal  to   x   because  of  the
  446. roundoff  errors involved in both  A*x  and  A\b , but we are not
  447. printing enough digits to see the difference.  The result of  the
  448. statement
  449.  
  450.    e = x - y
  451.  
  452. depends upon the particular computer being used.  In one case  it
  453. produces
  454.  
  455.    E     =
  456.  
  457.       1.0e-15 *
  458.  
  459.         .3053
  460.        -.2498
  461.         .0000
  462.  
  463. The quantity 1.0e-15 is a scale factor which multiplies  all  the
  464. components  which  follow.  Thus our vectors  x  and  y  actually
  465. agree to about 15 decimal places on this computer.
  466.  
  467.      It   is   also   possible   to   obtain   element-by-element
  468. multiplicative  operations.  If A and B have the same dimensions,
  469. then A .* B denotes the matrix  whose  elements  are  simply  the
  470. products  of the individual elements of A and B . The expressions
  471. A ./ B and A .\ B give the quotients of the individual elements.
  472.  
  473.      There are several possible output formats.  The statement
  474.  
  475.    long, x
  476.  
  477. results in
  478.  
  479.    X     =
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489. MATLAB, page 7
  490.  
  491.  
  492.  
  493.       -1.300000000000000
  494.         .800000000000000
  495.        3.141592653589793
  496.  
  497. The statement
  498.  
  499.    short
  500.  
  501. restores the original format.
  502.  
  503.      The expression A**p means  A  to  the  p-th  power.   It  is
  504. defined  if  A  is a square matrix and p is a scalar.  If p is an
  505. integer greater than one,  the  power  is  computed  by  repeated
  506. multiplication.   For  other values of p the calculation involves
  507. the eigenvalues and eigenvectors of A.
  508.  
  509.      Previously defined matrices and matrix  expressions  can  be
  510. used inside brackets to generate larger matrices, for example
  511.  
  512.    C = <A, b; <4 2 0>*x, x'>
  513.  
  514. results in
  515.  
  516.  
  517.    C     =
  518.  
  519.       1.0000   2.0000   3.0000   9.7248
  520.       4.0000   5.0000   6.0000  17.6496
  521.       7.0000   8.0000  10.0000  28.7159
  522.      -3.6000  -1.3000   0.8000   3.1416
  523.  
  524.  
  525.      There are four predefined variables,  EPS,  FLOP,  RAND  and
  526. EYE.  The variable EPS is used as a tolerance is determining such
  527. things as near singularity and rank.  Its initial  value  is  the
  528. distance  from  1.0  to the next largest floating point number on
  529. the particular computer being used.  The user may reset  this  to
  530. any other value, including zero. EPS is changed by CHOP, which is
  531. described in section 12.
  532.  
  533.      The value of RAND is a random variable, with a choice  of  a
  534. uniform or a normal distribution.
  535.  
  536.      The name EYE is used  in  place  of  I  to  denote  identity
  537. matrices  because  I is often used as a subscript or as sqrt(-1).
  538. The dimensions of EYE are determined by context.  For example,
  539.  
  540.    B = A + 3*EYE
  541.  
  542. adds 3 to the diagonal elements of A and
  543.  
  544.    X = EYE/A
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555. MATLAB, page 8
  556.  
  557.  
  558.  
  559. is one of several ways in MATLAB to invert a matrix.
  560.  
  561.      FLOP provides a  count  of  the  number  of  floating  point
  562. operations, or "flops", required for each calculation.
  563.  
  564.      A statement may consist of an  expression  alone,  in  which
  565. case a variable named ANS is created and the result stored in ANS
  566. for possible future use.  Thus
  567.  
  568.    A\A - EYE
  569.  
  570. is the same as
  571.  
  572.    ANS = A\A - EYE
  573.  
  574. (Roundoff error usually causes this result  to  be  a  matrix  of
  575. "small" numbers, rather than all zeros.)
  576.  
  577.      All computations are done  using  either  single  or  double
  578. precision  real  arithmetic,  whichever  is  appropriate  for the
  579. particular computer.  There  is  no  mixed-precision  arithmetic.
  580. The  Fortran  COMPLEX  data type is not used because many systems
  581. create  unnecessary  underflows  and   overflows   with   complex
  582. operations and because some systems do not allow double precision
  583. complex arithmetic.
  584.  
  585.  
  586. 2.  MATLAB functions
  587.  
  588.      Much of MATLAB's computational power comes from the  various
  589. matrix functions available.  The current list includes:
  590.  
  591.    INV(A)          - Inverse.
  592.    DET(A)          - Determinant.
  593.    COND(A)         - Condition number.
  594.    RCOND(A)        - A measure of nearness to singularity.
  595.    EIG(A)          - Eigenvalues and eigenvectors.
  596.    SCHUR(A)        - Schur triangular form.
  597.    HESS(A)         - Hessenberg or tridiagonal form.
  598.    POLY(A)         - Characteristic polynomial.
  599.    SVD(A)          - Singular value decomposition.
  600.    PINV(A,eps)     - Pseudoinverse with optional tolerance.
  601.    RANK(A,eps)     - Matrix rank with optional tolerance.
  602.    LU(A)           - Factors from Gaussian elimination.
  603.    CHOL(A)         - Factor from Cholesky factorization.
  604.    QR(A)           - Factors from Householder orthogonalization.
  605.    RREF(A)         - Reduced row echelon form.
  606.    ORTH(A)         - Orthogonal vectors spanning range of A.
  607.    EXP(A)          - e to the A.
  608.    LOG(A)          - Natural logarithm.
  609.    SQRT(A)         - Square root.
  610.    SIN(A)          - Trigonometric sine.
  611.    COS(A)          - Cosine.
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621. MATLAB, page 9
  622.  
  623.  
  624.  
  625.    ATAN(A)         - Arctangent.
  626.    ROUND(A)        - Round the elements to nearest integers.
  627.    ABS(A)          - Absolute value of the elements.
  628.    REAL(A)         - Real parts of the elements.
  629.    IMAG(A)         - Imaginary parts of the elements.
  630.    CONJG(A)        - Complex conjugate.
  631.    SUM(A)          - Sum of the elements.
  632.    PROD(A)         - Product of the elements.
  633.    DIAG(A)         - Extract or create diagonal matrices.
  634.    TRIL(A)         - Lower triangular part of A.
  635.    TRIU(A)         - Upper triangular part of A.
  636.    NORM(A,p)       - Norm with p = 1, 2 or 'Infinity'.
  637.    EYE(m,n)        - Portion of identity matrix.
  638.    RAND(m,n)       - Matrix with random elements.
  639.    ONES(m,n)       - Matrix of all ones.
  640.    MAGIC(n)        - Interesting test matrices.
  641.    HILBERT(n)      - Inverse Hilbert matrices.
  642.    ROOTS(C)        - Roots of polynomial with coefficients C.
  643.    DISPLAY(A,p)    - Print base p representation of A.
  644.    KRON(A,B)       - Kronecker tensor product of A and B.
  645.    PLOT(X,Y)       - Plot Y as a function of X .
  646.    RAT(A)          - Find "simple" rational approximation to A.
  647.    USER(A)         - Function defined by external program.
  648.  
  649.      Some of these functions have different interpretations  when
  650. the  argument  is  a  matrix  or  a  vector and some of them have
  651. additional optional arguments.  Details are  given  in  the  HELP
  652. document in the appendix.
  653.  
  654.      Several of these functions can  be  used  in  a  generalized
  655. assignment statement with two or three variables on the left hand
  656. side.  For example
  657.  
  658.    <X,D> = EIG(A)
  659.  
  660. stores the eigenvectors of A in  the  matrix  X  and  a  diagonal
  661. matrix containing the eigenvalues in the matrix D.  The statement
  662.  
  663.    EIG(A)
  664.  
  665. simply computes the eigenvalues and stores them in ANS.
  666.  
  667.      Future versions of MATLAB will probably  include  additional
  668. functions, since they can easily be added to the system.
  669.  
  670.  
  671.  
  672. 3.  Rows, columns and submatrices
  673.  
  674.  
  675.      Individual elements of a matrix can be  accessed  by  giving
  676. their subscripts in parentheses, eg. A(1,2), x(i), TAB(ind(k)+1).
  677. An expression used as a  subscript  is  rounded  to  the  nearest
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687. MATLAB, page 10
  688.  
  689.  
  690.  
  691. integer.
  692.  
  693.      Individual rows and columns can be accessed  using  a  colon
  694. ':' (or a '|') for the free subscript. For example, A(1,:) is the
  695. first row of A and A(:,j) is the j-th column.  Thus
  696.  
  697.    A(i,:) = A(i,:) + c*A(k,:)
  698.  
  699. adds c times the k-th row of A to the i-th row.
  700.  
  701.      The colon is used in several other ways in MATLAB,  but  all
  702. of the uses are based on the following definition.
  703.  
  704.    j:k    is the same as  <j, j+1, ..., k>
  705.    j:k    is empty if  j > k .
  706.    j:i:k  is the same as  <j, j+i, j+2i, ..., k>
  707.    j:i:k  is empty if  i > 0 and j > k or if i < 0 and j < k .
  708.  
  709. The colon is usually used with integers, but it  is  possible  to
  710. use arbitrary real scalars as well.  Thus
  711.  
  712.    1:4  is the same as  <1, 2, 3, 4>
  713.    0: 0.1: 0.5 is the same as <0.0, 0.1, 0.2, 0.3, 0.4, 0.5>
  714.  
  715.  
  716.      In general, a subscript can be a vector.  If  X  and  V  are
  717. vectors, then X(V) is <X(V(1)), X(V(2)), ..., X(V(n))> . This can
  718. also be used with matrices.  If V has m components and  W  has  n
  719. components,  then  A(V,W)  is  the  m by n matrix formed from the
  720. elements of A whose subscripts are  the  elements  of  V  and  W.
  721. Combinations  of the colon notation and the indirect subscripting
  722. allow manipulation of various submatrices. For example,
  723.  
  724.    A(<1,5>,:) = A(<5,1>,:)  interchanges rows 1 and 5 of A.
  725.    A(2:k,1:n)  is the submatrix formed from rows 2 through k
  726.       and columns 1 through n of A .
  727.    A(:,<3 1 2>)  is a permutation of the first three columns.
  728.  
  729.  
  730.      The notation A(:) has a special meaning.  On the right  hand
  731. side  of  an assignment statement, it denotes all the elements of
  732. A, regarded as a single column.  When an expression  is  assigned
  733. to  A(:),  the  current  dimensions  of  A,  rather  than  of the
  734. expression, are used.
  735.  
  736.  
  737. 4.  FOR, WHILE and IF
  738.  
  739.  
  740.      The FOR clause allows statements to be repeated  a  specific
  741. number of times.  The general form is
  742.  
  743.    FOR variable = expr,  statement, ..., statement, END
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753. MATLAB, page 11
  754.  
  755.  
  756.  
  757. The END and the comma before it may be omitted.  In general,  the
  758. expression  may be a matrix, in which case the columns are stored
  759. one at a time in the variable and the following statements, up to
  760. the  END or the end of the line, are executed.  The expression is
  761. often of the form j:k, and its "columns" are simply  the  scalars
  762. from j to k.  Some examples (assume n has already been assigned a
  763. value):
  764.  
  765.    for i = 1:n, for j = 1:n, A(i,j) = 1/(i+j-1);
  766.  
  767. generates the Hilbert matrix.
  768.  
  769.    for j = 2:n-1, for i = j:n-1, ...
  770.       A(i,j) = 0; end; A(j,j) = j; end; A
  771.  
  772. changes all but the "outer edge" of the lower triangle  and  then
  773. prints the final matrix.
  774.  
  775.    for h = 1.0: -0.1: -1.0, (<h, cos(pi*h)>)
  776.  
  777. prints a table of cosines.
  778.  
  779.    <X,D> = EIG(A); for v = X, v, A*v
  780.  
  781. displays eigenvectors, one at a time.
  782.  
  783.      The  WHILE  clause  allows  statements  to  be  repeated  an
  784. indefinite number of times.  The general form is
  785.  
  786.    WHILE expr relop expr,   statement,..., statement, END
  787.  
  788. where relop is =, <,  >,  <=,  >=,  or  <>  (not  equal)  .   The
  789. statements  are  repeatedly  executed  as  long  as the indicated
  790. comparison between the real parts of the first components of  the
  791. two  expressions  is true.  Here are two examples.  (Exercise for
  792. the reader: What do these segments do?)
  793.  
  794.    eps = 1;
  795.    while 1 + eps > 1, eps = eps/2;
  796.    eps = 2*eps
  797.  
  798.    E = 0*A;  F = E + EYE; n = 1;
  799.    while NORM(E+F-E,1) > 0, E = E + F; F = A*F/n; n = n + 1;
  800.    E
  801.  
  802.  
  803.      The IF clause allows conditional  execution  of  statements.
  804. The general form is
  805.  
  806.    IF expr relop expr,   statement, ..., statement,
  807.       ELSE statement, ..., statement
  808.  
  809. The first group of statements are executed  if  the  relation  is
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819. MATLAB, page 12
  820.  
  821.  
  822.  
  823. true  and the second group are executed if the relation is false.
  824. The ELSE and the statements following it  may  be  omitted.   For
  825. example,
  826.  
  827.    if abs(i-j) = 2, A(i,j) = 0;
  828.  
  829.  
  830. 5.  Commands, text, files and macros.
  831.  
  832.  
  833.      MATLAB has several commands which control the output  format
  834. and the overall execution of the system.
  835.  
  836.      The HELP command allows on-line access to short portions  of
  837. text   describing   various  operations,  functions  and  special
  838. characters.   The  entire  HELP  document  is  reproduced  in  an
  839. appendix.
  840.  
  841.      Results are usually printed in a scaled fixed  point  format
  842. that shows 4 or 5 significant figures.  The commands SHORT, LONG,
  843. SHORT E, LONG E and LONG Z alter the output format,  but  do  not
  844. alter the precision of the computations or the internal storage.
  845.  
  846.      The WHO, WHAT and WHY commands provide information about the
  847. functions and variables that are currently defined.
  848.  
  849.      The CLEAR command erases all variables,  except  EPS,  FLOP,
  850. RAND  and  EYE.  The  statement  A = <> indicates that a "0 by 0"
  851. matrix is to be stored in A.  This causes A to be erased so  that
  852. its storage can be used for other variables.
  853.  
  854.      The RETURN and EXIT commands cause return to the  underlying
  855. operating system through the Fortran RETURN statement.
  856.  
  857.      MATLAB has a limited facility for handling text.  Any string
  858. of characters delineated by quotes (with two quotes used to allow
  859. one quote within the string) is saved  as  a  vector  of  integer
  860. values  with '1' = 1, 'A' = 10, ' ' = 36, etc. (The complete list
  861. is in the appendix under CHAR.) For example
  862.  
  863.    '2*A + 3'  is the same as  <2 43 10 36 41 36 3>
  864.  
  865. It is possible,  though  seldom  very  meaningful,  to  use  such
  866. strings  in matrix operations.  More frequently, the text is used
  867. as a special argument to various functions.
  868.  
  869.    NORM(A,'inf')    computes the infinity norm of A .
  870.    DISPLAY(T)       prints the text stored in T .
  871.    EXEC('file')     obtains MATLAB input from an external file.
  872.    SAVE('file')     stores all the current variables in a file.
  873.    LOAD('file')     retrieves all the variables from a file.
  874.    PRINT('file',X)  prints X on a file.
  875.    DIARY('file')    makes a copy of the complete MATLAB session.
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885. MATLAB, page 13
  886.  
  887.  
  888.  
  889.  
  890.      The text can also be used in a limited  string  substitution
  891. macro  facility.   If a variable, say T, contains the source text
  892. for a MATLAB statement or expression, then the construction
  893.  
  894.    > T <
  895.  
  896. causes T to be executed or evaluated.  For example
  897.  
  898.    T = '2*A + 3';
  899.    S = 'B = >T< + 5'
  900.    A = 4;
  901.    > S <
  902.  
  903. produces
  904.  
  905.    B     =
  906.  
  907.       16.
  908.  
  909. Some other examples are given under MACRO in the appendix.   This
  910. facility  is  useful for fairly short statements and expressions.
  911. More complicated MATLAB "programs" should use the EXEC facility.
  912.  
  913.      The operations which access external files cannot be handled
  914. in  a  completely  machine-independent manner by portable Fortran
  915. code.  It  is  necessary  for  each  particular  installation  to
  916. provide  a  subroutine  which associates external text files with
  917. Fortran logical unit numbers.
  918.  
  919.  
  920. 6.  Census example
  921.  
  922.  
  923.      Our  first  extended   example   involves   predicting   the
  924. population  of  the  United States in 1980 using extrapolation of
  925. various fits to the census data from 1900  through  1970.   There
  926. are eight observations, so we begin with the MATLAB statement
  927.  
  928.    n = 8
  929.  
  930. The values of the dependent variable, the population in millions,
  931. can be entered with
  932.  
  933.    y = < 75.995   91.972  105.711  123.203   ...
  934.         131.669  150.697  179.323  203.212>'
  935.  
  936. In order to produce a reasonably scaled matrix,  the  independent
  937. variable,  time,  is transformed from the interval [1900,1970] to
  938. [-1.00,0.75].  This can be accomplished directly with
  939.  
  940.    t = -1.0:0.25:0.75
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951. MATLAB, page 14
  952.  
  953.  
  954.  
  955. or in a fancier, but perhaps clearer, way with
  956.  
  957.    t = 1900:10:1970;   t = (t - 1940*ones(t))/40
  958.  
  959. Either of these is equivalent to
  960.  
  961.    t = <-1 -.75 -.50 -.25 0 .25 .50 .75>
  962.  
  963.      The interpolating polynomial of  degree   n-1   involves  an
  964. Vandermonde  matrix  of  order   n   with  elements that might be
  965. generated by
  966.  
  967.    for i = 1:n, for j = 1:n, a(i,j) = t(i)**(j-1);
  968.  
  969. However, this results in an error caused by 0**0  when  i = 5 and
  970. j = 1 .  The preferable approach is
  971.  
  972.    A = ones(n,n);
  973.    for i = 1:n, for j = 2:n, a(i,j) = t(i)*a(i,j-1);
  974.  
  975. Now the statement
  976.  
  977.    cond(A)
  978.  
  979. produces the output
  980.  
  981.    ANS   =
  982.  
  983.       1.1819E+03
  984.  
  985. which indicates that transformation  of  the  time  variable  has
  986. resulted in a reasonably well conditioned matrix.
  987.  
  988.      The statement
  989.  
  990.    c = A\y
  991.  
  992. results in
  993.  
  994.    C     =
  995.  
  996.      131.6690
  997.       41.0406
  998.      103.5396
  999.      262.4535
  1000.     -326.0658
  1001.     -662.0814
  1002.      341.9022
  1003.      533.6373
  1004.  
  1005. These are the coefficients in the interpolating polynomial
  1006.  
  1007.                           n-1
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017. MATLAB, page 15
  1018.  
  1019.  
  1020.  
  1021.       c  + c t + ... + c t
  1022.        1    2           n
  1023.  
  1024. Our transformation of the time variable has resulted in   t  =  1
  1025. corresponding  to  the year 1980.  Consequently, the extrapolated
  1026. population is simply the sum of the coefficients.   This  can  be
  1027. computed by
  1028.  
  1029.    p = sum(c)
  1030.  
  1031. The result is
  1032.  
  1033.    P     =
  1034.  
  1035.      426.0950
  1036.  
  1037. which indicates a 1980 population of over 426 million.   Clearly,
  1038. using  the seventh degree interpolating polynomial to extrapolate
  1039. even a fairly short distance beyond the end of the data  interval
  1040. is not a good idea.
  1041.  
  1042.      The coefficients in least squares  fits  by  polynomials  of
  1043. lower  degree can be computed using fewer than  n  columns of the
  1044. matrix.
  1045.  
  1046.    for k = 1:n, c = A(:,1:k)\y,  p = sum(c)
  1047.  
  1048. would produce the coefficients of these  fits,  as  well  as  the
  1049. resulting  extrapolated  population.   If we do not want to print
  1050. all the coefficients, we can simply generate  a  small  table  of
  1051. populations  predicted  by  polynomials  of  degrees zero through
  1052. seven.  We also compute the maximum deviation between the  fitted
  1053. and observed values.
  1054.  
  1055.    for k = 1:n, X = A(:,1:k);  c = X\y;  ...
  1056.       d(k) = k-1;  p(k) = sum(c);  e(k) = norm(X*c-y,'inf');
  1057.    <d, p, e>
  1058.  
  1059. The resulting output is
  1060.  
  1061.       0   132.7227  70.4892
  1062.       1   211.5101   9.8079
  1063.       2   227.7744   5.0354
  1064.       3   241.9574   3.8941
  1065.       4   234.2814   4.0643
  1066.       5   189.7310   2.5066
  1067.       6   118.3025   1.6741
  1068.       7   426.0950   0.0000
  1069.  
  1070. The zeroth degree fit, 132.7 million, is the result of fitting  a
  1071. constant  to  the  data  and  is simply the average.  The results
  1072. obtained with polynomials of degree one through four  all  appear
  1073. reasonable.   The  maximum  deviation  of  the degree four fit is
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083. MATLAB, page 16
  1084.  
  1085.  
  1086.  
  1087. slightly greater than the degree three, even though  the  sum  of
  1088. the  squares  of the deviations is less.  The coefficients of the
  1089. highest powers in the fits of degree five and six turn out to  be
  1090. negative  and  the predicted populations of less than 200 million
  1091. are probably unrealistic.  The hopefully absurd prediction of the
  1092. interpolating polynomial concludes the table.
  1093.  
  1094.      We  wish  to  emphasize  that  roundoff   errors   are   not
  1095. significant  here.  Nearly identical results would be obtained on
  1096. other computers, or with other algorithms.   The  results  simply
  1097. indicate   the  difficulties  associated  with  extrapolation  of
  1098. polynomial fits of even modest degree.
  1099.  
  1100.      A stabilized fit by  a  seventh  degree  polynomial  can  be
  1101. obtained  using  the  pseudoinverse,  but  it  requires  a fairly
  1102. delicate choice of a tolerance. The statement
  1103.  
  1104.    s = svd(A)
  1105.  
  1106. produces the singular values
  1107.  
  1108.    S     =
  1109.  
  1110.       3.4594
  1111.       2.2121
  1112.       1.0915
  1113.       0.4879
  1114.       0.1759
  1115.       0.0617
  1116.       0.0134
  1117.       0.0029
  1118.  
  1119. We see that the last three singular values are less  than  0.1  ,
  1120. consequently,   A   can be approximately by a matrix of rank five
  1121. with an error less than 0.1 .  The Moore-Penrose pseudoinverse of
  1122. this  rank  five  matrix  is  obtained  from  the  singular value
  1123. decomposition with the following statements
  1124.  
  1125.    c = pinv(A,0.1)*y, p = sum(c), e = norm(a*c-y,'inf')
  1126.  
  1127. The output is
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149. MATLAB, page 17
  1150.  
  1151.  
  1152.  
  1153.    C     =
  1154.  
  1155.     134.7972
  1156.      67.5055
  1157.      23.5523
  1158.       9.2834
  1159.       3.0174
  1160.       2.6503
  1161.      -2.8808
  1162.       3.2467
  1163.  
  1164.    P     =
  1165.  
  1166.     241.1720
  1167.  
  1168.    E     =
  1169.  
  1170.       3.9469
  1171.  
  1172. The resulting seventh degree polynomial  has  coefficients  which
  1173. are much smaller than those of the interpolating polynomial given
  1174. earlier.  The predicted population and the maximum deviation  are
  1175. reasonable.   Any  choice  of the tolerance between the fifth and
  1176. sixth singular values would produce the same results, but choices
  1177. outside this range result in pseudoinverses of different rank and
  1178. do not work as well.
  1179.  
  1180.      The one term exponential approximation
  1181.  
  1182.      y(t) = k exp(pt)
  1183.  
  1184. can  be  transformed  into  a  linear  approximation  by   taking
  1185. logarithms.
  1186.  
  1187.      log(y(t)) = log k + pt
  1188.  
  1189.                = c  + c t
  1190.                   1    2
  1191.  
  1192. The following segment makes use of the fact that a function of  a
  1193. vector is the function applied to the individual components.
  1194.  
  1195.    X = A(:,1:2);
  1196.    c = X\log(y)
  1197.    p = exp(sum(c))
  1198.    e = norm(exp(X*c)-y,'inf')
  1199.  
  1200. The resulting output is
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215. MATLAB, page 18
  1216.  
  1217.  
  1218.  
  1219.    C     =
  1220.  
  1221.       4.9083
  1222.       0.5407
  1223.  
  1224.    P     =
  1225.  
  1226.     232.5134
  1227.  
  1228.    E     =
  1229.  
  1230.       4.9141
  1231.  
  1232. The   predicted   population   and   maximum   deviation   appear
  1233. satisfactory  and  indicate  that  the  exponential  model  is  a
  1234. reasonable one to consider.
  1235.  
  1236.      As a curiousity, we return to  the  degree  six  polynomial.
  1237. Since  the coefficient of the high order term is negative and the
  1238. value of the polynomial at t = 1 is positive, it must have a root
  1239. at some value of  t  greater than one.  The statements
  1240.  
  1241.    X = A(:,1:7);
  1242.    c = X\y;
  1243.    c = c(7:-1:1);  //reverse the order of the coefficients
  1244.    z = roots(c)
  1245.  
  1246. produce
  1247.  
  1248.    Z     =
  1249.  
  1250.       1.1023-  0.0000*i
  1251.       0.3021+  0.7293*i
  1252.      -0.8790+  0.6536*i
  1253.      -1.2939-  0.0000*i
  1254.      -0.8790-  0.6536*i
  1255.       0.3021-  0.7293*i
  1256.  
  1257. There is only one real, positive root.  The corresponding time on
  1258. the original scale is
  1259.  
  1260.    1940 + 40*real(z(1))
  1261.  
  1262.      =  1984.091
  1263.  
  1264. We conclude that the United States population should become  zero
  1265. early in February of 1984.
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281. MATLAB, page 19
  1282.  
  1283.  
  1284.  
  1285. 7.  Partial differential equation example
  1286.  
  1287.  
  1288.      Our second extended example is a boundary value problem  for
  1289. Laplace's equation.  The underlying physical problem involves the
  1290. conductivity of a  medium  with  cylindrical  inclusions  and  is
  1291. considered by Keller and Sachs [7].
  1292.  
  1293.      Find a function  u(x,y)  satisfying Laplace's equation
  1294.  
  1295.                u   + u   = 0
  1296.                 xx    yy
  1297.  
  1298. The domain is a unit square with a quarter circle of  radius  rho
  1299. removed from one corner.  There are Neumann conditions on the top
  1300. and bottom edges and Dirichlet conditions on the remainder of the
  1301. boundary.
  1302.  
  1303.  
  1304.                          u  = 0
  1305.                           n
  1306.  
  1307.                      -------------
  1308.                     |             .
  1309.                     |             .
  1310.                     |              .
  1311.                     |               .  u = 1
  1312.                     |                 .
  1313.                     |                    .
  1314.                     |                       .
  1315.              u = 0  |                        |
  1316.                     |                        |
  1317.                     |                        |
  1318.                     |                        |  u = 1
  1319.                     |                        |
  1320.                     |                        |
  1321.                     |                        |
  1322.                      ------------------------
  1323.  
  1324.                               u  = 0
  1325.                                n
  1326.  
  1327.  
  1328. The effective conductivity of an medium  is  then  given  by  the
  1329. integral along the left edge,
  1330.  
  1331.                             1
  1332.                  sigma = integral  u (0,y) dy
  1333.                            0        n
  1334.  
  1335. It is of interest to study the relation between  the  radius  rho
  1336. and  the  conductivity  sigma.   In particular, as rho approaches
  1337. one, sigma becomes infinite.
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347. MATLAB, page 20
  1348.  
  1349.  
  1350.  
  1351.      Keller and Sachs use a finite difference approximation.  The
  1352. following  technique  makes  use of the fact that the equation is
  1353. actually Laplace's equation and leads to a  much  smaller  matrix
  1354. problem to solve.
  1355.  
  1356.      Consider an approximate solution of the form
  1357.  
  1358.                  n      2j-1
  1359.            u =  sum  c r    cos(2j-1)t
  1360.                 j=1   j
  1361.  
  1362. where  r,t  are polar coordinates (t is theta).  The coefficients
  1363. are to be determined.  For any set of coefficients, this function
  1364. already satisfies the differential  equation  because  the  basis
  1365. functions  are  harmonic;  it  satisfies  the  normal  derivative
  1366. boundary condition on the bottom edge of the  domain  because  we
  1367. used   cos  t   in  preference  to   sin t ; and it satisfies the
  1368. boundary condition on the left edge of the domain because we  use
  1369. only odd multiples of  t .
  1370.  
  1371.      The computational task is to find coefficients  so that  the
  1372. boundary  conditions on the remaining edges are satisfied as well
  1373. as possible.  To accomplish this, pick  m  points  (r,t)  on  the
  1374. remaining edges.  It is desirable to have  m > n  and in practice
  1375. we usually choose m  to be two or three times as large  as   n  .
  1376. Typical  values  of  n  are 10 or 20 and of  m  are 20 to 60.  An
  1377. m  by  n  matrix  A  is generated.  The  i,j  element is the j-th
  1378. basis  function,  or its normal derivative, evaluated at the i-th
  1379. boundary point.  A right hand side with  m   components  is  also
  1380. generated.   In this example, the elements of the right hand side
  1381. are either zero or one.   The  coefficients  are  then  found  by
  1382. solving the overdetermined set of equations
  1383.  
  1384.             Ac = b
  1385.  
  1386. in a least squares sense.
  1387.  
  1388.      Once the coefficients have been determined, the  approximate
  1389. solution  is  defined  everywhere  on  the  domain.   It  is then
  1390. possible to compute the effective conductivity sigma .  In  fact,
  1391. a very simple formula results,
  1392.  
  1393.                      n       j-1
  1394.            sigma =  sum  (-1)   c
  1395.                     j=1          j
  1396.  
  1397.      To use MATLAB for this problem, the following  "program"  is
  1398. first  stored  in  the  local computer file system, say under the
  1399. name "PDE".
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413. MATLAB, page 21
  1414.  
  1415.  
  1416.  
  1417. //Conductivity example.
  1418. //Parameters ---
  1419.    rho       //radius of cylindrical inclusion
  1420.    n         //number of terms in solution
  1421.    m         //number of boundary points
  1422. //initialize operation counter
  1423.    flop = <0 0>;
  1424. //initialize variables
  1425.    m1 = round(m/3);   //number of points on each straight edge
  1426.    m2 = m - m1;       //number of points with Dirichlet conditions
  1427.    pi = 4*atan(1);
  1428. //generate points in Cartesian coordinates
  1429.    //right hand edge
  1430.    for i = 1:m1, x(i) = 1; y(i) = (1-rho)*(i-1)/(m1-1);
  1431.    //top edge
  1432.    for i = m2+1:m, x(i) = (1-rho)*(m-i)/(m-m2-1); y(i) = 1;
  1433.    //circular edge
  1434.    for i = m1+1:m2, t = pi/2*(i-m1)/(m2-m1+1); ...
  1435.       x(i) = 1-rho*sin(t);  y(i) = 1-rho*cos(t);
  1436. //convert to polar coordinates
  1437.    for i = 1:m-1, th(i) = atan(y(i)/x(i));  ...
  1438.       r(i) = sqrt(x(i)**2+y(i)**2);
  1439.    th(m) = pi/2;  r(m) = 1;
  1440. //generate matrix
  1441.    //Dirichlet conditions
  1442.    for i = 1:m2, for j = 1:n, k = 2*j-1; ...
  1443.       a(i,j) = r(i)**k*cos(k*th(i));
  1444.    //Neumann conditions
  1445.    for i = m2+1:m, for j = 1:n, k = 2*j-1; ...
  1446.       a(i,j) = k*r(i)**(k-1)*sin((k-1)*th(i));
  1447. //generate right hand side
  1448.    for i = 1:m2, b(i) = 1;
  1449.    for i = m2+1:m, b(i) = 0;
  1450. //solve for coefficients
  1451.    c = A\b
  1452. //compute effective conductivity
  1453.    c(2:2:n) = -c(2:2:n);
  1454.    sigma = sum(c)
  1455. //output total operation count
  1456.    ops = flop(2)
  1457.  
  1458.  
  1459.  
  1460.  
  1461.      The program can be used within MATLAB by setting  the  three
  1462. parameters and then accessing the file.  For example,
  1463.  
  1464.    rho = .9;
  1465.    n = 15;
  1466.    m = 30;
  1467.    exec('PDE')
  1468.  
  1469. The resulting output is
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479. MATLAB, page 22
  1480.  
  1481.  
  1482.  
  1483.    RHO   =
  1484.  
  1485.       .9000
  1486.  
  1487.    N     =
  1488.  
  1489.     15.
  1490.  
  1491.    M     =
  1492.  
  1493.     30.
  1494.  
  1495.    C     =
  1496.  
  1497.       2.2275
  1498.      -2.2724
  1499.       1.1448
  1500.       0.1455
  1501.      -0.1678
  1502.      -0.0005
  1503.      -0.3785
  1504.       0.2299
  1505.       0.3228
  1506.      -0.2242
  1507.      -0.1311
  1508.       0.0924
  1509.       0.0310
  1510.      -0.0154
  1511.      -0.0038
  1512.  
  1513.    SIGM  =
  1514.  
  1515.       5.0895
  1516.  
  1517.    OPS   =
  1518.  
  1519.       16204.
  1520.  
  1521.  
  1522.      A total of 16204 floating point operations were necessary to
  1523. set  up  the  matrix,  solve for the coefficients and compute the
  1524. conductivity.  The operation count  is  roughly  proportional  to
  1525. m*n**2.   The  results obtained for sigma as a function of rho by
  1526. this approach are essentially the same as those obtained  by  the
  1527. finite   difference  technique  of  Keller  and  Sachs,  but  the
  1528. computational effort involved is much less.
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545. MATLAB, page 23
  1546.  
  1547.  
  1548.  
  1549. 8.  Eigenvalue sensitivity example
  1550.  
  1551.  
  1552.      In this example, we construct a matrix whose eigenvalues are
  1553. moderately  sensitive  to  perturbations  and  then  analyze that
  1554. sensitivity. We begin with the statement
  1555.  
  1556.    B = <3 0 7; 0 2 0; 0 0 1>
  1557.  
  1558. which produces
  1559.  
  1560.    B     =
  1561.  
  1562.        3.    0.    7.
  1563.        0.    2.    0.
  1564.        0.    0.    1.
  1565.  
  1566.  
  1567.      Obviously, the eigenvalues of B are 1, 2 and 3 .   Moreover,
  1568. since   B  is  not  symmetric,  these  eigenvalues  are  slightly
  1569. sensitive to perturbation.  (The value b(1,3) = 7 was  chosen  so
  1570. that the elements of the matrix A below are less than 1000.)
  1571.  
  1572.      We now generate a similarity transformation to disguise  the
  1573. eigenvalues and make them more sensitive.
  1574.  
  1575.    L = <1 0 0; 2 1 0; -3 4 1>, M = L\L'
  1576.  
  1577.    L     =
  1578.  
  1579.        1.    0.    0.
  1580.        2.    1.    0.
  1581.       -3.    4.    1.
  1582.  
  1583.    M     =
  1584.  
  1585.        1.0000    2.0000   -3.0000
  1586.       -2.0000   -3.0000   10.0000
  1587.       11.0000   18.0000  -48.0000
  1588.  
  1589. The matrix M has determinant equal to 1 and is  moderately  badly
  1590. conditioned.  The similarity transformation is
  1591.  
  1592.    A = M*B/M
  1593.  
  1594.    A     =
  1595.  
  1596.      -64.0000   82.0000   21.0000
  1597.      144.0000 -178.0000  -46.0000
  1598.     -771.0000  962.0000  248.0000
  1599.  
  1600. Because  det(M) = 1 , the elements of  A  would be exact integers
  1601. if there were no roundoff.  So,
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611. MATLAB, page 24
  1612.  
  1613.  
  1614.  
  1615.    A = round(A)
  1616.  
  1617.    A     =
  1618.  
  1619.      -64.   82.   21.
  1620.      144. -178.  -46.
  1621.     -771.  962.  248.
  1622.  
  1623.  
  1624.      This, then, is our test matrix.  We can now  forget  how  it
  1625. was generated and analyze its eigenvalues.
  1626.  
  1627.    <X,D> = eig(A)
  1628.  
  1629.    D     =
  1630.  
  1631.        3.0000    0.0000    0.0000
  1632.        0.0000    1.0000    0.0000
  1633.        0.0000    0.0000    2.0000
  1634.  
  1635.    X     =
  1636.  
  1637.        -.0891    3.4903   41.8091
  1638.         .1782   -9.1284  -62.7136
  1639.        -.9800   46.4473  376.2818
  1640.  
  1641. Since A is similar to B, its eigenvalues are also  1,  2  and  3.
  1642. They  happen  to  be  computed  in  another  order by the EISPACK
  1643. subroutines.  The fact that the  columns  of  X,  which  are  the
  1644. eigenvectors,  are  so  far  from  being orthonormal is our first
  1645. indication that  the  eigenvalues  are  sensitive.  To  see  this
  1646. sensitivity, we display more figures of the computed eigenvalues.
  1647.  
  1648.    long, diag(D)
  1649.  
  1650.    ANS   =
  1651.  
  1652.       2.999999999973599
  1653.       1.000000000015625
  1654.       2.000000000011505
  1655.  
  1656. We see that, on this computer, the last five significant  figures
  1657. are  contaminated  by  roundoff  error.  A  somewhat  superficial
  1658. explanation of this is provided by
  1659.  
  1660.    short,  cond(X)
  1661.  
  1662.    ANS   =
  1663.  
  1664.       3.2216e+05
  1665.  
  1666. The condition number of X gives an upper bound for  the  relative
  1667. error  in  the  computed  eigenvalues.   However,  this condition
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677. MATLAB, page 25
  1678.  
  1679.  
  1680.  
  1681. number is affected by scaling.
  1682.  
  1683.    X = X/diag(X(3,:)),  cond(X)
  1684.  
  1685.    X     =
  1686.  
  1687.         .0909     .0751     .1111
  1688.        -.1818    -.1965    -.1667
  1689.        1.0000    1.0000    1.0000
  1690.  
  1691.    ANS   =
  1692.  
  1693.       1.7692e+03
  1694.  
  1695.  
  1696.      Rescaling the eigenvectors so that their last components are
  1697. all  equal  to  one  has  two consequences. The condition of X is
  1698. decreased by over two orders of magnitude.  (This  is  about  the
  1699. minimum condition that can be obtained by such diagonal scaling.)
  1700. Moreover, it is now apparent  that  the  three  eigenvectors  are
  1701. nearly parallel.
  1702.  
  1703.      More  detailed  information  on  the  sensitivity   of   the
  1704. individual eigenvalues involves the left eigenvectors.
  1705.  
  1706.    Y = inv(X'),  Y'*A*X
  1707.  
  1708.    Y     =
  1709.  
  1710.     -511.5000  259.5000  252.0000
  1711.      616.0000 -346.0000 -270.0000
  1712.      159.5000  -86.5000  -72.0000
  1713.  
  1714.    ANS   =
  1715.  
  1716.        3.0000     .0000     .0000
  1717.         .0000    1.0000     .0000
  1718.         .0000     .0000    2.0000
  1719.  
  1720. We are now in a position to  compute  the  sensitivities  of  the
  1721. individual eigenvalues.
  1722.  
  1723.    for j = 1:3, c(j) = norm(Y(:,j))*norm(X(:,j)); end,  C
  1724.  
  1725.    C     =
  1726.  
  1727.      833.1092
  1728.      450.7228
  1729.      383.7564
  1730.  
  1731. These three numbers are the reciprocals of  the  cosines  of  the
  1732. angles  between the left and right eigenvectors.  It can be shown
  1733. that  perturbation  of  the  elements  of  A  can  result  in   a
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743. MATLAB, page 26
  1744.  
  1745.  
  1746.  
  1747. perturbation of the j-th eigenvalue which is c(j) times as large.
  1748. In  this  example,  the  first   eigenvalue   has   the   largest
  1749. sensitivity.
  1750.  
  1751.      We now proceed to show that A is close to a  matrix  with  a
  1752. double eigenvalue.  The direction of the required perturbation is
  1753. given by
  1754.  
  1755.    E = -1.e-6*Y(:,1)*X(:,1)'
  1756.  
  1757.    E     =
  1758.  
  1759.       1.0e-03 *
  1760.  
  1761.         .0465    -.0930     .5115
  1762.        -.0560     .1120    -.6160
  1763.        -.0145     .0290    -.1595
  1764.  
  1765. With some trial and error which we do not show,  we  bracket  the
  1766. point  where  two  eigenvalues of a perturbed A coalesce and then
  1767. become complex.
  1768.  
  1769.    eig(A + .4*E),  eig(A + .5*E)
  1770.  
  1771.    ANS   =
  1772.  
  1773.        1.1500
  1774.        2.5996
  1775.        2.2504
  1776.  
  1777.    ANS   =
  1778.  
  1779.       2.4067 +  .1753*i
  1780.       2.4067 -  .1753*i
  1781.       1.1866 + 0.0000*i
  1782.  
  1783. Now, a bisecting search, driven by the imaginary part of  one  of
  1784. the eigenvalues, finds the point where two eigenvalues are nearly
  1785. equal.
  1786.  
  1787.    r = .4;  s = .5;
  1788.  
  1789.    while s-r > 1.e-14, t = (r+s)/2; d = eig(A+t*E); ...
  1790.      if imag(d(1))=0, r = t; else, s = t;
  1791.  
  1792.    long,  T
  1793.  
  1794.    T     =
  1795.  
  1796.         .450380734134507
  1797.  
  1798.  
  1799.      Finally, we display the perturbed matrix, which is obviously
  1800.  
  1801.  
  1802.  
  1803.  
  1804.  
  1805.  
  1806.  
  1807.  
  1808.  
  1809. MATLAB, page 27
  1810.  
  1811.  
  1812.  
  1813. close  to the original, and its pair of nearly equal eigenvalues.
  1814. (We have dropped a few digits from the long output.)
  1815.  
  1816.    A+t*E,  eig(A+t*E)
  1817.  
  1818.    A
  1819.  
  1820.     -63.999979057   81.999958114   21.000230369
  1821.     143.999974778 -177.999949557  -46.000277434
  1822.    -771.000006530  962.000013061  247.999928164
  1823.  
  1824.    ANS   =
  1825.  
  1826.       2.415741150
  1827.       2.415740621
  1828.       1.168517777
  1829.  
  1830.  
  1831.      The  first  two  eigenvectors  of  A  +   t*E   are   almost
  1832. indistinguishable  indicating that the perturbed matrix is almost
  1833. defective.
  1834.  
  1835.    <X,D> = eig(A+t*E);  X = X/diag(X(3,:))
  1836.  
  1837.    X     =
  1838.  
  1839.        .096019578     .096019586    .071608466
  1840.       -.178329614    -.178329608   -.199190520
  1841.       1.000000000    1.000000000   1.000000000
  1842.  
  1843.    short,  cond(X)
  1844.  
  1845.    ANS   =
  1846.  
  1847.       3.3997e+09
  1848.  
  1849.  
  1850. 9.  Syntax diagrams
  1851.  
  1852.  
  1853.      A formal description of the language acceptable  to  MATLAB,
  1854. as well as a flow chart of the MATLAB program, is provided by the
  1855. syntax diagrams or syntax graphs of Wirth [6].  There are  eleven
  1856. non-terminal symbols in the language:
  1857.  
  1858.    line, statement, clause, expression, term,
  1859.    factor, number, integer, name, command, text .
  1860.  
  1861. The diagrams define each of the non-terminal  symbols  using  the
  1862. others and the terminal symbols:
  1863.  
  1864.    letter -- A through Z,
  1865.    digit  -- 0 through 9,
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875. MATLAB, page 28
  1876.  
  1877.  
  1878.  
  1879.    char   -- ( ) ; : + - * / \ = . , < >
  1880.    quote  -- '
  1881.  
  1882.  
  1883. line
  1884.  
  1885.        |-----> statement >----|
  1886.        |                      |
  1887.        |-----> clause >-------|
  1888.        |                      |
  1889. -------|-----> expr >---------|------>
  1890.      | |                      | |
  1891.      | |-----> command >------| |
  1892.      | |                      | |
  1893.      | |-> > >-> expr >-> < >-| |
  1894.      | |                      | |
  1895.      | |----------------------| |
  1896.      |                          |
  1897.      |        |-< ; <-|         |
  1898.      |--------|       |---------|
  1899.               |-< , <-|
  1900.  
  1901.  
  1902.  
  1903.  
  1904. statement
  1905.  
  1906.      |-> name >--------------------------------|
  1907.      |          |                              |
  1908.      |          |         |--> : >---|         |
  1909.      |          |         |          |         |
  1910.      |          |-> ( >---|-> expr >-|---> ) >-|
  1911.      |                  |              |       |
  1912. -----|                  |-----< , <----|       |--> = >--> expr >--->
  1913.      |                                         |
  1914.      |       |--< , <---|                      |
  1915.      |       |          |                      |
  1916.      |-> < >---> name >---> > >----------------|
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941. MATLAB, page 29
  1942.  
  1943.  
  1944.  
  1945. clause
  1946.  
  1947.      |---> FOR   >---> name >---> = >---> expr >--------------|
  1948.      |                                                        |
  1949.      | |-> WHILE >-|                                          |
  1950.      |-|           |-> expr >----------------------           |
  1951.      | |-> IF    >-|          |   |   |   |   |   |           |
  1952. -----|                        <   <=  =   <>  >=  >           |---->
  1953.      |                        |   |   |   |   |   |           |
  1954.      |                        ----------------------> expr >--|
  1955.      |                                                        |
  1956.      |---> ELSE  >--------------------------------------------|
  1957.      |                                                        |
  1958.      |---> END   >--------------------------------------------|
  1959.  
  1960.  
  1961.  
  1962.  
  1963. expr
  1964.  
  1965.        |-> + >-|
  1966.        |       |
  1967. -------|-------|-------> term >---------->
  1968.        |       |    |             |
  1969.        |-> - >-|    |  |-< + <-|  |
  1970.                     |  |       |  |
  1971.                     |--|-< - <-|--|
  1972.                        |       |
  1973.                        |-< : <-|
  1974.  
  1975.  
  1976.  
  1977.  
  1978. term
  1979.  
  1980. ---------------------> factor >---------------------->
  1981.         |                                   |
  1982.         |             |-< * <-|             |
  1983.         |  |-------|  |       |  |-------|  |
  1984.         |--|       |--|-< / <-|--|       |--|
  1985.            |-< . <-|  |       |  |-< . <-|
  1986.                       |-< \ <-|
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992.  
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007. MATLAB, page 30
  2008.  
  2009.  
  2010.  
  2011. factor
  2012.  
  2013.      |----------------> number >---------------|
  2014.      |                                         |
  2015.      |-> name >--------------------------------|
  2016.      |          |                              |
  2017.      |          |         |--> : >---|         |
  2018.      |          |         |          |         |
  2019.      |          |-> ( >---|-> expr >-|---> ) >-|
  2020.      |                  |              |       |
  2021.      |                  |-----< , <----|       |
  2022.      |                                         |
  2023. -----|------------> ( >-----> expr >-----> ) >-|-|-------|----->
  2024.      |                                         | |       | |
  2025.      |                  |--------------|       | |-> ' >-| |
  2026.      |                  |              |       |           |
  2027.      |------------> < >-|---> expr >---|-> > >-|           |
  2028.      |                    |          |         |           |
  2029.      |                    |--<   <---|         |           |
  2030.      |                    |          |         |           |
  2031.      |                    |--< ; <---|         |           |
  2032.      |                    |          |         |           |
  2033.      |                    |--< , <---|         |           |
  2034.      |                                         |           |
  2035.      |------------> > >-----> expr >-----> < >-|           |
  2036.      |                                         |           |
  2037.      |-----> factor >---> ** >---> factor >----|           |
  2038.      |                                                     |
  2039.      |------------> ' >-----> text >-----> ' >-------------|
  2040.  
  2041.  
  2042.  
  2043.  
  2044. number
  2045.  
  2046.     |----------|                          |-> + >-|
  2047.     |          |                          |       |
  2048. -----> int >-----> . >---> int >-----> E >---------> int >---->
  2049.              |                   | |      |       |        |
  2050.              |                   | |      |-> - >-|        |
  2051.              |                   | |                       |
  2052.              |---------------------------------------------|
  2053.  
  2054.  
  2055.  
  2056.  
  2057. int
  2058.  
  2059. ------------> digit >----------->
  2060.           |           |
  2061.           |-----------|
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073. MATLAB, page 31
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079. name
  2080.  
  2081.                   |--< letter <--|
  2082.                   |              |
  2083. ------> letter >--|--------------|----->
  2084.                   |              |
  2085.                   |--< digit  <--|
  2086.  
  2087.  
  2088.  
  2089.  
  2090. command
  2091.  
  2092.                         |--> name >--|
  2093.                         |            |
  2094. --------> name >--------|------------|---->
  2095.                         |            |
  2096.                         |--> char >--|
  2097.                         |            |
  2098.                         |---> ' >----|
  2099.  
  2100. text
  2101.  
  2102.                 |-> letter >--|
  2103.                 |             |
  2104.                 |-> digit >---|
  2105. ----------------|             |-------------->
  2106.             |   |-> char >----|   |
  2107.             |   |             |   |
  2108.             |   |-> ' >-> ' >-|   |
  2109.             |                     |
  2110.             |---------------------|
  2111.  
  2112.  
  2113. 10.  The parser-interpreter
  2114.  
  2115.  
  2116.      The structure of the parser-interpreter is similar  to  that
  2117. of  Wirth's  compiler  [6] for his simple language, PL/0 , except
  2118. that MATLAB  is  programmed  in  Fortran,  which  does  not  have
  2119. explicit recursion.  The interrelation of the primary subroutines
  2120. is shown in the following diagram.
  2121.  
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139. MATLAB, page 32
  2140.  
  2141.  
  2142.  
  2143.       MAIN
  2144.         |
  2145.       MATLAB    |--CLAUSE
  2146.         |       |    |
  2147.       PARSE-----|--EXPR----TERM----FACTOR
  2148.                 |    |       |       |
  2149.                 |    |-------|-------|
  2150.                 |    |       |       |
  2151.                 |  STACK1  STACK2  STACKG
  2152.                 |
  2153.                 |--STACKP--PRINT
  2154.                 |
  2155.                 |--COMAND
  2156.                 |
  2157.                 |
  2158.                 |          |--CGECO
  2159.                 |          |
  2160.                 |          |--CGEFA
  2161.                 |          |
  2162.                 |--MATFN1--|--CGESL
  2163.                 |          |
  2164.                 |          |--CGEDI
  2165.                 |          |
  2166.                 |          |--CPOFA
  2167.                 |
  2168.                 |
  2169.                 |          |--IMTQL2
  2170.                 |          |
  2171.                 |          |--HTRIDI
  2172.                 |          |
  2173.                 |--MATFN2--|--HTRIBK
  2174.                 |          |
  2175.                 |          |--CORTH
  2176.                 |          |
  2177.                 |          |--COMQR3
  2178.                 |
  2179.                 |
  2180.                 |--MATFN3-----CSVDC
  2181.                 |
  2182.                 |
  2183.                 |          |--CQRDC
  2184.                 |--MATFN4--|
  2185.                 |          |--CQRSL
  2186.                 |
  2187.                 |
  2188.                 |          |--FILES
  2189.                 |--MATFN5--|
  2190.                            |--SAVLOD
  2191.  
  2192.      Subroutine  PARSE  controls  the  interpretation   of   each
  2193. statement.    It  calls  subroutines  that  process  the  various
  2194. syntactic  quantities  such  as  command,  expression,  term  and
  2195. factor.   A  fairly  simple  program stack mechanism allows these
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.  
  2203.  
  2204.  
  2205. MATLAB, page 33
  2206.  
  2207.  
  2208.  
  2209. subroutines to recursively "call"  each  other  along  the  lines
  2210. allowed  by  the  syntax  diagrams.   The  four STACK subroutines
  2211. manage the variable memory  and  perform  elementary  operations,
  2212. such as matrix addition and transposition.
  2213.  
  2214.      The  four  subroutines  MATFN1  though  MATFN4  are   called
  2215. whenever  "serious"  matrix  computations are required.  They are
  2216. interface routines which call the  various  LINPACK  and  EISPACK
  2217. subroutines.  MATFN5 primarily handles the file access tasks.
  2218.  
  2219.      Two large real arrays, STKR and STKI, are used to store  all
  2220. the  matrices.   Four integer arrays are used to store the names,
  2221. the row and column dimensions, and the  pointers  into  the  real
  2222. stacks.  The following diagram illustrates this storage scheme.
  2223.  
  2224. TOP         IDSTK     MSTK NSTK LSTK               STKR       STKI
  2225.  --      -- -- -- --   --   --   --              --------   --------
  2226. |  |--->|  |  |  |  | |  | |  | |  |----------->|        | |        |
  2227.  --      -- -- -- --   --   --   --              --------   --------
  2228.         |  |  |  |  | |  | |  | |  |            |        | |        |
  2229.          -- -- -- --   --   --   --              --------   --------
  2230.               .         .    .    .                  .          .
  2231.               .         .    .    .                  .          .
  2232.               .         .    .    .                  .          .
  2233.          -- -- -- --   --   --   --              --------   --------
  2234. BOT     |  |  |  |  | |  | |  | |  |            |        | |        |
  2235.  --      -- -- -- --   --   --   --              --------   --------
  2236. |  |--->| X|  |  |  | | 2| | 1| |  |----------->|  3.14  | |  0.00  |
  2237.  --      -- -- -- --   --   --   --              --------   --------
  2238.         | A|  |  |  | | 2| | 2| |  |---------   |  0.00  | |  1.00  |
  2239.          -- -- -- --   --   --   --          \   --------   --------
  2240.         | E| P| S|  | | 1| | 1| |  |-------   ->| 11.00  | |  0.00  |
  2241.          -- -- -- --   --   --   --        \     --------   --------
  2242.         | F| L| O| P| | 1| | 2| |  |------  \   | 21.00  | |  0.00  |
  2243.          -- -- -- --   --   --   --       \  \   --------   --------
  2244.         | E| Y| E|  | |-1| |-1| |  |---    \ |  | 12.00  | |  0.00  |
  2245.          -- -- -- --   --   --   --    \   | |   --------   --------
  2246.         | R| A| N| D| | 1| | 1| |  |-   \  | |  | 22.00  | |  0.00  |
  2247.          -- -- -- --   --   --   --  \  |  \ \   --------   --------
  2248.                                      |  \   \ ->| 1.E-15 | |  0.00  |
  2249.                                      \   \   \   --------   --------
  2250.                                       \   \   ->|  0.00  | |  0.00  |
  2251.                                        \   \     --------   --------
  2252.                                         \   \   |  0.00  | |  0.00  |
  2253.                                          \   \   --------   --------
  2254.                                           \   ->|  1.00  | |  0.00  |
  2255.                                            \     --------   --------
  2256.                                             --->| URAND  | |  0.00  |
  2257.                                                  --------   --------
  2258.  
  2259.      The top portion of the stack is used for temporary variables
  2260. and the bottom portion for saved variables.  The figure shows the
  2261. situation after the line
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271. MATLAB, page 34
  2272.  
  2273.  
  2274.  
  2275.    A = <11,12; 21,22>,  x = <3.14, sqrt(-1)>'
  2276.  
  2277. has been processed.  The four permanent names,  EPS,  FLOP,  RAND
  2278. and  EYE,  occupy the last four positions of the variable stacks.
  2279. RAND has dimensions 1 by 1, but whenever its value is  requested,
  2280. a random number generator is used instead.  EYE has dimensions -1
  2281. by -1 to indicate that the actual dimensions must  be  determined
  2282. later by context.  The two saved variables have dimensions 2 by 2
  2283. and 2 by 1 and so take up a total of 6 locations.
  2284.  
  2285.      Subsequent statements involving  A  and  x  will  result  in
  2286. temporary  copies  being  made in the top of the stack for use in
  2287. the actual calculations.  Whenever the top of the  stack  reaches
  2288. the  bottom,  a  message  indicating  memory has been exceeded is
  2289. printed, but the current variables are not affected.
  2290.  
  2291.      This modular structure makes it possible to implement MATLAB
  2292. on a system with a limited amount of memory.  The object code for
  2293. the MATFN's and the LINPACK-EISPACK subroutines is rarely needed.
  2294. Although  it  is  not  standard,  many  Fortran operating systems
  2295. provide some overlay mechanism so that this code is brought  into
  2296. the  main memory only when required.  The variables, which occupy
  2297. a relatively small portion of the memory, remain in place,  while
  2298. the subroutines which process them are loaded a few at a time.
  2299.  
  2300.  
  2301. 11.  The numerical algorithms
  2302.  
  2303.  
  2304.      The algorithms underlying the  basic  MATLAB  functions  are
  2305. described  in the LINPACK and EISPACK guides [1-3]. The following
  2306. list gives the subroutines used by these functions.
  2307.  
  2308.    INV(A)          - CGECO,CGEDI
  2309.    DET(A)          - CGECO,CGEDI
  2310.    LU(A)           - CGEFA
  2311.    RCOND(A)        - CGECO
  2312.    CHOL(A)         - CPOFA
  2313.    SVD(A)          - CSVDC
  2314.    COND(A)         - CSVDC
  2315.    NORM(A,2)       - CSVDC
  2316.    PINV(A,eps)     - CSVDC
  2317.    RANK(A,eps)     - CSVDC
  2318.    QR(A)           - CQRDC,CQRSL
  2319.    ORTH(A)         - CQRDC,CSQSL
  2320.    A\B and B/A     - CGECO,CGESL if A is square.
  2321.                    - CQRDC,CQRSL if A is not square.
  2322.    EIG(A)          - HTRIDI,IMTQL2,HTRIBK if A is Hermitian.
  2323.                    - CORTH,COMQR2         if A is not Hermitian.
  2324.    SCHUR(A)        - same as EIG.
  2325. SHAR_EOF
  2326. #    End of shell archive
  2327. exit 0
  2328. -- 
  2329. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  2330. Have five nice days.
  2331.